package com.xu.cloud.common.template;

import com.xu.cloud.common.pojo.http.req.BaseRequest;
import com.xu.cloud.common.pojo.http.resp.BaseResponse;

/**
 * 通用请求模板
 *
 * @author xuguan
 * @since 2023/4/3
 */
public interface RequestTemplate<Req extends BaseRequest, Resp extends BaseResponse> {

    /**
     * 接收参数
     */
    default void recv(Req req) {
    }

    /**
     * 参数校验
     */
    default void valid(Req req) {
    }

    /**
     * 业务校验
     */
    default void check(Req req) {
    }

    /**
     * 执行前业务
     */
    default void preRequest(Req req) {
    }

    /**
     * 具体请求
     */
    Resp request(Req req);

    /**
     * 执行后业务
     */
    default void postRequest(Req req, Resp resp, Exception exception) {
    }
}
